package com.rao.gmall.cart.service;

import com.rao.gmall.model.cart.CartInfo;

import javax.servlet.http.HttpServletRequest;
import java.util.List;

/**
 * @author nzmxfan
 * @create 2021-08-17-19:40
 */
public interface CartService {

    /**
     * 告诉我们操作哪个用户的购物车
     * 用户登录了；有Cookie
     *      token：
     * 用户没登录：有Cookie
     *      userTempId：
     *
     */
    String determinCartKey(HttpServletRequest request);

    /**
     * 向购物车添加商品
     * @param key
     * @param skuId
     * @param skuNum
     * @return
     */
    CartInfo addToCart(String key, Long skuId, Integer skuNum);

    /**
     * 获取临时购物车用的key
     * @param request
     * @return
     */
    String tempCartKey(HttpServletRequest request);

    /**
     * 获取用户购物车用的key
     * @param request
     * @return
     */
    String userCartKey(HttpServletRequest request);

    /**
     * 根据 key 查询所有的 cartInfo
     * @param userCartKey
     * @param tempCartKey
     * @return
     */
    List<CartInfo> listCart(String userCartKey, String tempCartKey);

    /**
     * 更改勾选状态
     * @param key
     * @param skuId
     * @param checked
     */
    void ajaxCheckCart(String key, Long skuId, Integer checked);

    /**
     * 根据 key 获取购物车，根据 skuId 删除对应的购物项
     * @param key
     * @param skuId
     */
    void deleteCartInfo(String key, Long skuId);

    /**
     * 获取所有被选中的商品信息
     * @param key
     * @return
     */
    List<CartInfo> listCheckCartInfo(String key);

    /**
     * 批量删除购物车中的购物项
     * @param key
     * @param skuIds
     */
    void deleteBatch(String key, List<String> skuIds);
}
